#include "widget.h"
#include "ui_widget.h"
#include <QButtonGroup>
#include <QListView>
#include <QDebug>

#include "SortCreator.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    initSettingBar();

}

Widget::~Widget()
{
    delete ui;

}

void Widget::initSettingBar()
{
    //互斥
    QButtonGroup *group=new QButtonGroup(this);
    group->addButton(ui->btnReset);
    group->addButton(ui->btnSort);
        //一般用于多个按钮组成QButtonGroup并且setExclusive(true)。
    group->setExclusive(true);
       //toggled()信号：设置成setCheckable(true)后再单击按钮才会触发该信号ui->btnReset与ui->btnSort缺一不可
        ui->btnReset->setCheckable(true);
        //toggled()信号：设置成setCheckable(true)后再单击按钮才会触发该信号。
        ui->btnSort->setCheckable(true);
   qDebug()<< "btnSort中setCheckable状态："<<ui->btnSort->isDefault();
        //不可选中
        ui->btnSort->setEnabled(false);
    //设置按钮边框高亮
        ui->btnReset->setAutoDefault(true);
        qDebug()<<"btnReset中setAutoDefault状态："<< ui->btnReset->autoDefault();
    //设置按钮边框高亮
        ui->btnSort->setAutoDefault(true);

    //下拉框item行高
    ui->comboType->setView(new QListView(this));
    //排序类型
    ui->comboType->addItems(SortCreator::getSortList());

    //重置数据
    connect(ui->btnReset,&QPushButton::clicked,this,[this]{
        //btnSort正常状态
         ui->btnSort->setEnabled(true);
        //目前没有比较已有的类型是否相同
        SortObejct *obj=SortCreator::createSortObject(ui->comboType->currentIndex(),ui->canvas);
        //dataReset打印随即数据传入个数
        ui->canvas->dataReset(obj,ui->slider_ge->value());
    });

    //排序开始
    connect(ui->btnSort,&QPushButton::clicked,this,[this]{
        ui->canvas->startSort(ui->slider_sss->value());
    });

    connect(ui->btnSort,&QPushButton::toggled,this,[this](bool checked){
        //在排序的时候不能设置参数
        ui->comboType->setEnabled(!checked);
        ui->spinBox_ge->setEnabled(!checked);
        ui->spinBox_sss->setEnabled(!checked);
        ui->slider_ge->setEnabled(!checked);
        ui->slider_sss->setEnabled(!checked);
    });

    //排序完
    connect(ui->canvas,&SortCanvas::finished,this,[this]{
        ui->btnReset->setChecked(true);
        //不可选中
        ui->btnSort->setEnabled(false);
    });


}


void Widget::on_slider_ge_valueChanged(int value)
{
     ui->spinBox_ge->setValue(value);
}

void Widget::on_slider_sss_valueChanged(int value)
{
      ui->spinBox_sss->setValue(value);
}

void Widget::on_spinBox_ge_valueChanged(int arg1)
{
    ui->slider_ge->setValue(arg1);
}

void Widget::on_spinBox_sss_valueChanged(int arg1)
{
    ui->slider_sss->setValue(arg1);
}
